#!/usr/bin/env python
"""
    Artificial Intelligence for Humans
    Volume 1: Fundamental Algorithms
    Python Version
    http://www.aifh.org
    http://www.jeffheaton.com

    Code repository:
    https://github.com/jeffheaton/aifh

    Copyright 2013 by Jeff Heaton

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    For more information on Heaton Research copyrights, licenses
    and trademarks visit:
    http://www.heatonresearch.com/copyright
============================================================================================================
This example shows how to normalize the iris data set.  Equilateral encoding is used for the species, and range
is used for the measurements.

Reading CSV file: /Users/jheaton/projects/aifh/vol1/python-examples/datasets/iris.csv
[-0.5555555555555558, 0.24999999999999978, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.6666666666666664, -0.16666666666666674, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.7777777777777777, 0.0, -0.8983050847457628, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.8333333333333335, -0.08333333333333337, -0.8305084745762712, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.33333333333333326, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.38888888888888873, 0.583333333333333, -0.7627118644067796, -0.75, -0.8660254037844386, -0.5]
[-0.8333333333333335, 0.16666666666666652, -0.864406779661017, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.16666666666666652, -0.8305084745762712, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.9444444444444442, -0.2500000000000002, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.6666666666666664, -0.08333333333333337, -0.8305084745762712, -1.0, -0.8660254037844386, -0.5]
[-0.38888888888888873, 0.4166666666666665, -0.8305084745762712, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.7222222222222223, 0.16666666666666652, -0.7966101694915254, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.7222222222222223, -0.16666666666666674, -0.864406779661017, -1.0, -0.8660254037844386, -0.5]
[-1.0, -0.16666666666666674, -0.9661016949152542, -1.0, -0.8660254037844386, -0.5]
[-0.16666666666666674, 0.6666666666666665, -0.9322033898305084, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.2222222222222221, 1.0, -0.8305084745762712, -0.75, -0.8660254037844386, -0.5]
[-0.38888888888888873, 0.583333333333333, -0.8983050847457628, -0.75, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.24999999999999978, -0.864406779661017, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.2222222222222221, 0.49999999999999956, -0.7627118644067796, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.49999999999999956, -0.8305084745762712, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.38888888888888873, 0.16666666666666652, -0.7627118644067796, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.4166666666666665, -0.8305084745762712, -0.75, -0.8660254037844386, -0.5]
[-0.8333333333333335, 0.33333333333333326, -1.0, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.08333333333333304, -0.7627118644067796, -0.6666666666666666, -0.8660254037844386, -0.5]
[-0.7222222222222223, 0.16666666666666652, -0.6949152542372882, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.611111111111111, -0.16666666666666674, -0.7966101694915254, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.16666666666666652, -0.7966101694915254, -0.75, -0.8660254037844386, -0.5]
[-0.4999999999999999, 0.24999999999999978, -0.8305084745762712, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.4999999999999999, 0.16666666666666652, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.7777777777777777, 0.0, -0.7966101694915254, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.7222222222222223, -0.08333333333333337, -0.7966101694915254, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.38888888888888873, 0.16666666666666652, -0.8305084745762712, -0.75, -0.8660254037844386, -0.5]
[-0.4999999999999999, 0.7499999999999996, -0.8305084745762712, -1.0, -0.8660254037844386, -0.5]
[-0.33333333333333337, 0.8333333333333333, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.6666666666666664, -0.08333333333333337, -0.8305084745762712, -1.0, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.0, -0.9322033898305084, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.33333333333333337, 0.24999999999999978, -0.8983050847457628, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.6666666666666664, -0.08333333333333337, -0.8305084745762712, -1.0, -0.8660254037844386, -0.5]
[-0.9444444444444442, -0.16666666666666674, -0.8983050847457628, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.16666666666666652, -0.8305084745762712, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.24999999999999978, -0.8983050847457628, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.8888888888888888, -0.7500000000000002, -0.8983050847457628, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.9444444444444442, 0.0, -0.8983050847457628, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.24999999999999978, -0.7966101694915254, -0.5833333333333333, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.49999999999999956, -0.6949152542372882, -0.75, -0.8660254037844386, -0.5]
[-0.7222222222222223, -0.16666666666666674, -0.864406779661017, -0.8333333333333334, -0.8660254037844386, -0.5]
[-0.5555555555555558, 0.49999999999999956, -0.7966101694915254, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.8333333333333335, 0.0, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.44444444444444453, 0.4166666666666665, -0.8305084745762712, -0.9166666666666666, -0.8660254037844386, -0.5]
[-0.611111111111111, 0.08333333333333304, -0.864406779661017, -0.9166666666666666, -0.8660254037844386, -0.5]
[0.4999999999999998, 0.0, 0.2542372881355932, 0.08333333333333326, 0.8660254037844386, -0.5]
[0.16666666666666674, 0.0, 0.18644067796610164, 0.16666666666666674, 0.8660254037844386, -0.5]
[0.4444444444444444, -0.08333333333333337, 0.3220338983050848, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.33333333333333337, -0.7500000000000002, 0.016949152542372836, 0.0, 0.8660254037844386, -0.5]
[0.2222222222222221, -0.3333333333333336, 0.22033898305084731, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.2222222222222221, -0.3333333333333336, 0.18644067796610164, 0.0, 0.8660254037844386, -0.5]
[0.11111111111111094, 0.08333333333333304, 0.2542372881355932, 0.25, 0.8660254037844386, -0.5]
[-0.6666666666666664, -0.6666666666666667, -0.22033898305084754, -0.25, 0.8660254037844386, -0.5]
[0.27777777777777746, -0.2500000000000002, 0.22033898305084731, 0.0, 0.8660254037844386, -0.5]
[-0.4999999999999999, -0.41666666666666663, -0.016949152542372947, 0.08333333333333326, 0.8660254037844386, -0.5]
[-0.611111111111111, -1.0, -0.15254237288135597, -0.25, 0.8660254037844386, -0.5]
[-0.11111111111111094, -0.16666666666666674, 0.0847457627118644, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.05555555555555558, -0.8333333333333333, 0.016949152542372836, -0.25, 0.8660254037844386, -0.5]
[-2.220446049250313e-16, -0.2500000000000002, 0.2542372881355932, 0.08333333333333326, 0.8660254037844386, -0.5]
[-0.277777777777778, -0.2500000000000002, -0.11864406779661019, 0.0, 0.8660254037844386, -0.5]
[0.33333333333333326, -0.08333333333333337, 0.15254237288135597, 0.08333333333333326, 0.8660254037844386, -0.5]
[-0.277777777777778, -0.16666666666666674, 0.18644067796610164, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.16666666666666674, -0.41666666666666663, 0.05084745762711851, -0.25, 0.8660254037844386, -0.5]
[0.05555555555555558, -0.8333333333333333, 0.18644067796610164, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.277777777777778, -0.5833333333333334, -0.016949152542372947, -0.16666666666666663, 0.8660254037844386, -0.5]
[-0.11111111111111094, 0.0, 0.2881355932203389, 0.41666666666666674, 0.8660254037844386, -0.5]
[-2.220446049250313e-16, -0.3333333333333336, 0.016949152542372836, 0.0, 0.8660254037844386, -0.5]
[0.11111111111111094, -0.5833333333333334, 0.3220338983050848, 0.16666666666666674, 0.8660254037844386, -0.5]
[-2.220446049250313e-16, -0.3333333333333336, 0.2542372881355932, -0.08333333333333337, 0.8660254037844386, -0.5]
[0.16666666666666674, -0.2500000000000002, 0.11864406779661008, 0.0, 0.8660254037844386, -0.5]
[0.27777777777777746, -0.16666666666666674, 0.15254237288135597, 0.08333333333333326, 0.8660254037844386, -0.5]
[0.3888888888888886, -0.3333333333333336, 0.2881355932203389, 0.08333333333333326, 0.8660254037844386, -0.5]
[0.33333333333333326, -0.16666666666666674, 0.35593220338983045, 0.33333333333333326, 0.8660254037844386, -0.5]
[-0.05555555555555558, -0.2500000000000002, 0.18644067796610164, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.2222222222222221, -0.5, -0.15254237288135597, -0.25, 0.8660254037844386, -0.5]
[-0.33333333333333337, -0.6666666666666667, -0.05084745762711873, -0.16666666666666663, 0.8660254037844386, -0.5]
[-0.33333333333333337, -0.6666666666666667, -0.0847457627118644, -0.25, 0.8660254037844386, -0.5]
[-0.16666666666666674, -0.41666666666666663, -0.016949152542372947, -0.08333333333333337, 0.8660254037844386, -0.5]
[-0.05555555555555558, -0.41666666666666663, 0.3898305084745761, 0.25, 0.8660254037844386, -0.5]
[-0.38888888888888873, -0.16666666666666674, 0.18644067796610164, 0.16666666666666674, 0.8660254037844386, -0.5]
[-0.05555555555555558, 0.16666666666666652, 0.18644067796610164, 0.25, 0.8660254037844386, -0.5]
[0.33333333333333326, -0.08333333333333337, 0.2542372881355932, 0.16666666666666674, 0.8660254037844386, -0.5]
[0.11111111111111094, -0.7500000000000002, 0.15254237288135597, 0.0, 0.8660254037844386, -0.5]
[-0.277777777777778, -0.16666666666666674, 0.05084745762711851, 0.0, 0.8660254037844386, -0.5]
[-0.33333333333333337, -0.5833333333333334, 0.016949152542372836, 0.0, 0.8660254037844386, -0.5]
[-0.33333333333333337, -0.5, 0.15254237288135597, -0.08333333333333337, 0.8660254037844386, -0.5]
[-2.220446049250313e-16, -0.16666666666666674, 0.22033898305084731, 0.08333333333333326, 0.8660254037844386, -0.5]
[-0.16666666666666674, -0.5, 0.016949152542372836, -0.08333333333333337, 0.8660254037844386, -0.5]
[-0.611111111111111, -0.7500000000000002, -0.22033898305084754, -0.25, 0.8660254037844386, -0.5]
[-0.277777777777778, -0.41666666666666663, 0.0847457627118644, 0.0, 0.8660254037844386, -0.5]
[-0.2222222222222221, -0.16666666666666674, 0.0847457627118644, -0.08333333333333337, 0.8660254037844386, -0.5]
[-0.2222222222222221, -0.2500000000000002, 0.0847457627118644, 0.0, 0.8660254037844386, -0.5]
[0.05555555555555558, -0.2500000000000002, 0.11864406779661008, 0.0, 0.8660254037844386, -0.5]
[-0.5555555555555558, -0.5833333333333334, -0.3220338983050848, -0.16666666666666663, 0.8660254037844386, -0.5]
[-0.2222222222222221, -0.3333333333333336, 0.05084745762711851, 0.0, 0.8660254037844386, -0.5]
[0.11111111111111094, 0.08333333333333304, 0.6949152542372881, 1.0, 0.0, 1.0]
[-0.16666666666666674, -0.41666666666666663, 0.3898305084745761, 0.5, 0.0, 1.0]
[0.5555555555555551, -0.16666666666666674, 0.6610169491525424, 0.6666666666666667, 0.0, 1.0]
[0.11111111111111094, -0.2500000000000002, 0.5593220338983049, 0.41666666666666674, 0.0, 1.0]
[0.2222222222222221, -0.16666666666666674, 0.6271186440677965, 0.7500000000000002, 0.0, 1.0]
[0.833333333333333, -0.16666666666666674, 0.8983050847457625, 0.6666666666666667, 0.0, 1.0]
[-0.6666666666666664, -0.5833333333333334, 0.18644067796610164, 0.33333333333333326, 0.0, 1.0]
[0.6666666666666665, -0.2500000000000002, 0.7966101694915253, 0.41666666666666674, 0.0, 1.0]
[0.33333333333333326, -0.5833333333333334, 0.6271186440677965, 0.41666666666666674, 0.0, 1.0]
[0.6111111111111112, 0.33333333333333326, 0.7288135593220337, 1.0, 0.0, 1.0]
[0.2222222222222221, 0.0, 0.3898305084745761, 0.5833333333333333, 0.0, 1.0]
[0.16666666666666674, -0.41666666666666663, 0.4576271186440677, 0.5, 0.0, 1.0]
[0.3888888888888886, -0.16666666666666674, 0.5254237288135593, 0.6666666666666667, 0.0, 1.0]
[-0.2222222222222221, -0.5833333333333334, 0.35593220338983045, 0.5833333333333333, 0.0, 1.0]
[-0.16666666666666674, -0.3333333333333336, 0.3898305084745761, 0.9166666666666665, 0.0, 1.0]
[0.16666666666666674, 0.0, 0.4576271186440677, 0.8333333333333333, 0.0, 1.0]
[0.2222222222222221, -0.16666666666666674, 0.5254237288135593, 0.41666666666666674, 0.0, 1.0]
[0.8888888888888888, 0.49999999999999956, 0.9322033898305084, 0.7500000000000002, 0.0, 1.0]
[0.8888888888888888, -0.5, 1.0, 0.8333333333333333, 0.0, 1.0]
[-0.05555555555555558, -0.8333333333333333, 0.35593220338983045, 0.16666666666666674, 0.0, 1.0]
[0.4444444444444444, 0.0, 0.5932203389830508, 0.8333333333333333, 0.0, 1.0]
[-0.277777777777778, -0.3333333333333336, 0.3220338983050848, 0.5833333333333333, 0.0, 1.0]
[0.8888888888888888, -0.3333333333333336, 0.9322033898305084, 0.5833333333333333, 0.0, 1.0]
[0.11111111111111094, -0.41666666666666663, 0.3220338983050848, 0.41666666666666674, 0.0, 1.0]
[0.33333333333333326, 0.08333333333333304, 0.5932203389830508, 0.6666666666666667, 0.0, 1.0]
[0.6111111111111112, 0.0, 0.6949152542372881, 0.41666666666666674, 0.0, 1.0]
[0.05555555555555558, -0.3333333333333336, 0.2881355932203389, 0.41666666666666674, 0.0, 1.0]
[-2.220446049250313e-16, -0.16666666666666674, 0.3220338983050848, 0.41666666666666674, 0.0, 1.0]
[0.16666666666666674, -0.3333333333333336, 0.5593220338983049, 0.6666666666666667, 0.0, 1.0]
[0.6111111111111112, -0.16666666666666674, 0.6271186440677965, 0.25, 0.0, 1.0]
[0.7222222222222223, -0.3333333333333336, 0.7288135593220337, 0.5, 0.0, 1.0]
[1.0, 0.49999999999999956, 0.8305084745762712, 0.5833333333333333, 0.0, 1.0]
[0.16666666666666674, -0.3333333333333336, 0.5593220338983049, 0.7500000000000002, 0.0, 1.0]
[0.11111111111111094, -0.3333333333333336, 0.3898305084745761, 0.16666666666666674, 0.0, 1.0]
[-2.220446049250313e-16, -0.5, 0.5593220338983049, 0.08333333333333326, 0.0, 1.0]
[0.8888888888888888, -0.16666666666666674, 0.7288135593220337, 0.8333333333333333, 0.0, 1.0]
[0.11111111111111094, 0.16666666666666652, 0.5593220338983049, 0.9166666666666665, 0.0, 1.0]
[0.16666666666666674, -0.08333333333333337, 0.5254237288135593, 0.41666666666666674, 0.0, 1.0]
[-0.05555555555555558, -0.16666666666666674, 0.2881355932203389, 0.41666666666666674, 0.0, 1.0]
[0.4444444444444444, -0.08333333333333337, 0.4915254237288136, 0.6666666666666667, 0.0, 1.0]
[0.33333333333333326, -0.08333333333333337, 0.5593220338983049, 0.9166666666666665, 0.0, 1.0]
[0.4444444444444444, -0.08333333333333337, 0.3898305084745761, 0.8333333333333333, 0.0, 1.0]
[-0.16666666666666674, -0.41666666666666663, 0.3898305084745761, 0.5, 0.0, 1.0]
[0.3888888888888886, 0.0, 0.6610169491525424, 0.8333333333333333, 0.0, 1.0]
[0.33333333333333326, 0.08333333333333304, 0.5932203389830508, 1.0, 0.0, 1.0]
[0.33333333333333326, -0.16666666666666674, 0.423728813559322, 0.8333333333333333, 0.0, 1.0]
[0.11111111111111094, -0.5833333333333334, 0.35593220338983045, 0.5, 0.0, 1.0]
[0.2222222222222221, -0.16666666666666674, 0.423728813559322, 0.5833333333333333, 0.0, 1.0]
[0.05555555555555558, 0.16666666666666652, 0.4915254237288136, 0.8333333333333333, 0.0, 1.0]
[-0.11111111111111094, -0.16666666666666674, 0.3898305084745761, 0.41666666666666674, 0.0, 1.0]
"""
__author__ = 'jheaton'

import os
import sys

# Find the AIFH core files
aifh_dir = os.path.dirname(os.path.abspath(__file__))
aifh_dir = os.path.abspath(aifh_dir + os.sep + ".." + os.sep + "lib" + os.sep + "aifh")
sys.path.append(aifh_dir)

from normalize import Normalize


# find the Iris data set
irisFile = os.path.dirname(os.path.realpath(__file__))
irisFile = os.path.abspath(irisFile + "../../datasets/iris.csv")

# Read the Iris data set.
print('Reading CSV file: ' + irisFile)
norm = Normalize()
result = norm.load_csv(irisFile)

# Setup the first four fields to "range normalize" between -1 and 1.
for i in range(0, 4):
    norm.make_col_numeric(result, i)
    norm.norm_col_range(result, i, -1, 1)

# Discover all of the classes for column #4, the iris species.
classes = norm.build_class_map(result, 4)

# Normalize iris species with equilateral encoding
norm.norm_col_equilateral(result, 4, classes, -1, 1)

# Display the resulting data
norm.display_data(result)

